package com.youboy.oauth.provider;

import com.youboy.oauth.consumer.InvalidConsumerKeyException;
import com.youboy.oauth.model.InvalidRequestVerbException;
import com.youboy.oauth.model.MissingRequiredParameterException;
import com.youboy.oauth.model.OAuthConsumerAuthentication;
import com.youboy.oauth.model.UnsupportedParameterException;
import com.youboy.oauth.nonce.InvalidNonceException;
import com.youboy.oauth.signature.InvalidSignatureException;
import com.youboy.oauth.signature.UnsupportedSignatureMethodException;
import com.youboy.oauth.token.InvalidTokenException;

/**
 * 
 * @author loudyn
 * 
 */
public interface OAuthProvider {

	/**
	 * 
	 * @return
	 */
	public String getVersion();

	/**
	 * 
	 * @return
	 * @throws UnsupportedParameterException
	 * @throws MissingRequiredParameterException
	 */
	public OAuthProvider exceptOAuthRequest() throws UnsupportedParameterException,
														MissingRequiredParameterException,
														InvalidRequestVerbException;

	/**
	 * 
	 * @return
	 * @throws InvalidNonceException
	 */
	public OAuthProvider exceptOAuthNonce() throws InvalidNonceException;

	/**
	 * 
	 * @return
	 * @throws InvalidTokenException
	 */
	public OAuthProvider exceptOAuthToken() throws InvalidTokenException;

	/**
	 * 
	 * @return
	 * @throws UnsupportedSignatureMethodException
	 * @throws InvalidSignatureException
	 */
	public OAuthProvider exceptOAuthSignature() throws UnsupportedSignatureMethodException, InvalidSignatureException;

	/**
	 * 
	 * @return
	 * @throws InvalidConsumerKeyException
	 */
	public OAuthProvider exceptOAuthConsumer() throws InvalidConsumerKeyException;

	/**
	 * 
	 * @return
	 */
	public OAuthConsumerAuthentication returnOAuthConsumerAuthentication();

}
